<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xml:lang="en" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Task: Refine the Architecture</title>
<meta name="uma.type" content="Task">
<meta name="uma.name" content="refine_the_arch">
<meta name="uma.presentationName" content="Refine the Architecture">
<meta name="uma.category" content="Discipline:architecture_discipline:Architecture">
<meta name="element_type" content="activity">
<meta name="filetype" content="description">
<meta name="role" content="">
<link rel="StyleSheet" href="./../../css/default.css" type="text/css">
<script src="./../../scripts/ContentPageResource.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageSubSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/ContentPageToolbar.js" type="text/javascript" language="JavaScript"></script><script src="./../../scripts/contentPage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
					var backPath = './../../';
					var imgPath = './../../images/';
					var nodeInfo=null;
					contentPage.preload(imgPath, backPath, nodeInfo, '', true, false, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top">
<div id="page-guid" value="_0gRJgMlgEdmt3adZL5Dmdw"></div>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="pageTitle" nowrap="true">Task: Refine the Architecture</td><td width="100%">
<div align="right" id="contentPageToolbar"></div>
</td><td width="100%" class="expandCollapseLink" align="right"><a name="mainIndex" href="./../../index.htm"></a><script language="JavaScript" type="text/javascript" src="./../../scripts/treebrowser.js"></script></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="pageTitleSeparator"><img src="./../../images/shim.gif" alt="" title="" height="1"></td>
</tr>
</table>
<div class="overview">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50"><img src="./../../images/task.gif" alt="" title=""></td><td>
<table class="overviewTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">Refine the architecture to an appropriate level of detail to support development.</td>
</tr>
<tr>
<td>Disciplines: <a href="./../../core.default.cat_def.base/disciplines/architecture_discipline_3A224435.html" guid="_iGSHsFZ-EdyIUdvDLLUdeg">Architecture</a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Purpose</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell">To make and document the architectural decisions necessary to support development.</td>
</tr>
</table>
</div>
<div class="sectionHeading">Relationships</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Roles</th><td class="sectionTableCell" width="42%"><span class="sectionTableCellHeading">Primary Performer:
								</span>
<ul>
<li>
<a href="./../../core.default.role_def.base/roles/architect_E7A12309.html" guid="_0X9iEMlgEdmt3adZL5Dmdw">Architect</a>
</li>
</ul>
</td><td class="sectionTableCell"><span class="sectionTableCellHeading">Additional Performers:
								</span>
<ul>
<li>
<a href="./../../core.default.role_def.base/roles/developer_C633AB7.html" guid="_0YDosMlgEdmt3adZL5Dmdw">Developer</a>
</li>
<li>
<a href="./../../core.default.role_def.base/roles/project_manager_E657F936.html" guid="_0a0o0MlgEdmt3adZL5Dmdw">Project Manager</a>
</li>
</ul>
</td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Inputs</th><td class="sectionTableCell" width="42%"><span class="sectionTableCellHeading">Mandatory:
								</span>
<ul>
<li>
<a href="./../../practice.tech.evolutionary_arch.base/workproducts/architecture_notebook_9BB92433.html" guid="_0XAf0MlgEdmt3adZL5Dmdw">Architecture Notebook</a>
</li>
</ul>
<ul>
<li>
<a href="./../../core.tech.slot.base/workproducts/technical_specification_slot_2812F7EF.html" guid="_i3vkoLS-EduDY8LNbMCDBA">[Technical Specification]</a>
<ul>
<li>
<a href="./../../core.gen.common.base/workproducts/glossary_5D300778.html" guid="_Wn7HcNcEEdqz_d2XWoVt6Q">Glossary</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/workproducts/system_wide_requirements_7D9DD47C.html" guid="_BVh9cL-CEdqb7N6KIeDL8Q">System-WideRequirements</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/workproducts/use_case_22BE66E2.html" guid="_0VGbUMlgEdmt3adZL5Dmdw">Use Case</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/workproducts/use_case_model_85965D1B.html" guid="_W2SgEDR5EdutE_HNDTJk5Q">Use-Case Model</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/workproducts/vision_2E71B03C.html" guid="_0WVxcMlgEdmt3adZL5Dmdw">Vision</a>
</li>
</ul>
</li>
</ul>
</td><td class="sectionTableCell"><span class="sectionTableCellHeading">Optional:
								</span>
<ul></ul>
<ul>
<li>
<a href="./../../core.tech.slot.base/workproducts/software_design_slot_84295A08.html" guid="_IcQOUEqdEdyi3_jfs__bIQ">[Software Design]</a>
<ul>
<li>
<a href="./../../practice.tech.evolutionary_design.base/workproducts/design_D677D182.html" guid="_0WuL8slgEdmt3adZL5Dmdw">Design</a>
</li>
</ul>
</li>
<li>
<a href="./../../core.tech.slot.base/workproducts/software_implementation_slot_E92F6A39.html" guid="_Vux8UEfUEdyiPI8btkmvmw">[Software Implementation]</a>
<ul>
<li>
<a href="./../../practice.tech.continuous_integration.base/workproducts/build_95D7D8FD.html" guid="_0YuXEMlgEdmt3adZL5Dmdw">Build</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/workproducts/implementation_AFFEFC46.html" guid="_JqYbgJ01EdyQ3oTO93enUw">Implementation</a>
</li>
</ul>
</li>
</ul>
</td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Outputs</th><td class="sectionTableCell" colspan="2">
<ul>
<li>
<a href="./../../practice.tech.evolutionary_arch.base/workproducts/architecture_notebook_9BB92433.html" guid="_0XAf0MlgEdmt3adZL5Dmdw">Architecture Notebook</a>
</li>
</ul>
<ul></ul>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Main Description</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><p>
    This task&nbsp;builds upon the outlined architecture and makes concrete and unambiguous architectural decisions to
    support development.&nbsp; It takes into&nbsp;account any design and implementation work products that have been
    developed so far.&nbsp; In other words, the architecture evolves as the solution is designed and implemented, and the
    architecture documentation is updated to reflect any changes made during development. This is&nbsp;a key,&nbsp;since
    the actual implementation is the only real "proof" that the software architecture is viable and provides the definitive
    basis for validating the suitability&nbsp;of the architecture.&nbsp; For more information, see <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/concepts/executable_arch_D4E68CBD.html" guid="_O1kAANvfEduv2KOT-Teh6w">Concept: Executable Architecture</a>.
</p>
<p>
    The results are captured for future reference and are communicated across the team.
</p></td>
</tr>
</table>
</div>
<div class="sectionHeading">Steps</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="sectionTableSingleCell">
<div class="stepHeading">Refine the architectural goals and architecturally-significant requirements</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Work with the team, especially the stakeholders and the requirements team, to review the status of the <a class="elementLink" href="./../../core.tech.common.extend_supp/guidances/concepts/arch_goals_CB41D8AE.html" guid="_HlRqANpbEdyP58ppo1Ieaw">Architectural Goals</a>&nbsp;and <a class="elementLink" href="./../../core.tech.common.extend_supp/guidances/concepts/arch_significant_requirements_1EE5D757.html" guid="_HrZGIA4MEduibvKwrGxWxA">Architecturally Significant Requirements</a>&nbsp;and refine them as needed. It may be
    that some new architecturally-significant requirements have been introduced or your architectural goals and priorities
    may have changed.
</p>
<p>
    The development work performed so far will also inform the decisions and goals you've identified. Use information from
    designing and implementing the system so far to adjust and refined those decisions and goals.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Identify architecturally significant design elements</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p align="left">
    Identify concrete&nbsp;design elements (such as <a class="elementLink" href="./../../core.tech.common.extend_supp/guidances/concepts/component_CB167D48.html" guid="_0YP18MlgEdmt3adZL5Dmdw">Component</a>s, classes and&nbsp;subsystems)&nbsp;and provide at least a name and brief
    description for each.
</p>
<p align="left">
    The following are some good sources for design elements:
</p>
<ul>
    <li>
        <div align="left">
            <div align="left">
                <a class="elementLink" href="./../../core.tech.common.extend_supp/guidances/concepts/arch_significant_requirements_1EE5D757.html" guid="_HrZGIA4MEduibvKwrGxWxA">Architecturally Significant Requirements</a>. Highlight the areas of the
                architecture that participate in realizing, or implementing, the requirements.
            </div>
        </div>
    </li>
    <li>
        <div align="left">
            <div align="left">
                <a class="elementLink" href="./../../core.tech.common.extend_supp/guidances/concepts/key_abstractions_1474DBF2.html" guid="_pLEGUNqGEdy88NBoQgfGyg">Key Abstractions</a>
            </div>
        </div>
    </li>
    <li>
        <div align="left">
            <div align="left">
                Components that encapsulate the system's interface with external systems.&nbsp; For more information, see
                <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/guidelines/repres_interfaces_to_ext_systems_51A34F6E.html" guid="_0gjdYMlgEdmt3adZL5Dmdw">Guideline: Representing Interfaces to External Systems</a>
            </div>
        </div>
    </li>
    <li>
        Components that implement the <a class="elementLink" href="./../../core.tech.common.extend_supp/guidances/concepts/arch_mechanism_2932DFB6.html" guid="_mzxI0A4LEduibvKwrGxWxA">Architectural Mechanism</a>s
    </li>
    <li>
        Architectural and key design <a class="elementLink" href="./../../core.tech.common.extend_supp/guidances/concepts/pattern_10BE6D96.html" guid="_0YJvUMlgEdmt3adZL5Dmdw">Pattern</a>s. Apply the chosen patterns to define a new set of elements that conform
        to the patterns.
    </li>
</ul>
<p>
    Identifying components will help hide the complexity of the system and help you work at a higher level. Components need
    to be internally cohesive and to provide external services through a limited interface.&nbsp; At this point, interfaces
    do not need to be as detailed as a signature, but they do need to document what the elements need, what they can use,
    and what they can depend on.
</p>
<p>
    Component identification can be&nbsp;based on architectural layers, deployment choices, or key abstractions. Ask
    yourself these questions:
</p>
<ul>
    <li>
        What is logically or functionally related (same use case or service, for example)?
    </li>
    <li>
        What entities provide services to multiple others?
    </li>
    <li>
        What entities depend on each other? Strongly or weakly?
    </li>
    <li>
        What entities should you be able to exchange independently from others?
    </li>
    <li>
        What will run on the same processor or network node?
    </li>
    <li>
        What parts are constrained by similar performance requirements?
    </li>
</ul>
<p>
    When you identify a component be sure to briefly describe the functionality that should be allocated to the components.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Refine architectural mechanisms</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p>
    Refine&nbsp;the applicable <a class="elementLink" href="./../../core.tech.common.extend_supp/guidances/concepts/arch_mechanism_2932DFB6.html" guid="_mzxI0A4LEduibvKwrGxWxA">Architectural Mechanism</a>s, as needed to support the design.&nbsp; For example,
    refining an analysis mechanism into a design mechanism and/or refining a design mechanism into an implementation
    mechanism.&nbsp;<br />
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Define development architecture and test architecture</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td>Ensure that the development and test architectures are defined. Note any architecturally significant differences between
these environments and work with the team to devise strategies to mitigate any risks these may introduce.</td>
</tr>
</table>
</div>
<div class="stepHeading">Identify additional reuse opportunities</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p dir="ltr" style="MARGIN-RIGHT: 0px">
    Continue to look for more opportunities to reuse existing assets.&nbsp; Where applicable, identify existing components
    that could be built to be reused.
</p>
<p dir="ltr" style="MARGIN-RIGHT: 0px">
    For more information, see <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/guidelines/software_reuse_B6B04C26.html" guid="_vO2uoO0OEduUpsu85bVhiQ">Guideline: Software Reuse</a>.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Validate the architecture</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td>Make sure that the architecture supports the requirements and the needs of the team. <br />
<br />
Development work should be performed to produce just enough working software to show that the architecture is viable. This
should provide the definitive basis for validating the suitability of the architecture. As the software should be developed
iteratively, more than one increment of the build may be required to prove the architecture. During the early stages of the
project it may be acceptable for the software to have a incomplete or prototypical feel, as it will be primarily concerned
with baselining the architecture to provide a stable foundation for the remaining development work.</td>
</tr>
</table>
</div>
<div class="stepHeading">Map the software to the hardware</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td><p align="left">
    Map the architecturally significant design elements to the target deployment environment. Work with hardware and
    network specialists to ensure that the hardware is sufficient to meet the needs of the system; and that any new
    hardware is available in time.
</p></td>
</tr>
</table>
</div>
<div class="stepHeading">Communicate decisions</div>
<div class="stepContent">
<table class="stepTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td>Ensure that those who need to act upon the architectural work understand it and are able to work with it. Make sure that
the description of the architecture clearly conveys not only the solution but also the motivation and objectives related to
the decisions that have been made in shaping the architecture. This will make it easier for others to understand the
architecture and to adapt it over time.</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Key Considerations</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><p>
    It is important to continue to reduce the complexity of the&nbsp;solution by raising the levels of abstraction.&nbsp;
    For more information, see <a class="elementLinkWithType" href="./../../core.tech.common.extend_supp/guidances/guidelines/abstract_away_complexity_DBF13AE6.html" guid="_we3F4ACpEdu8m4dIntu6jA">Guideline: Abstract Away Complexity</a>.
</p>
<p>
    Continue the collaboration with the whole&nbsp;team on the refining of the architecture in order to promote consensus
    and a common understanding of the overall solution. The architect should be working to coordinate and guide the
    technical activities of the team rather than doing all the work alone.&nbsp;Place special emphasis&nbsp;on
    involving&nbsp;the developer(s) throughout this task since it's the developed solution that will prove out the
    architecture and may result in refinements to the architecture documentation.
</p>
<p>
    Ensure that those who need to act upon the architectural work&nbsp;understand&nbsp;it and are able to work with
    it.&nbsp;Make sure that the description of the architecture clearly conveys not only the solution but also the
    motivation and objectives related to the&nbsp;decisions that have been made in shaping the architecture. This will make
    it easier for others to understand the architecture and to adapt it over time.
</p>
<p>
    You can communicate your decisions as many ways as you wish.&nbsp; For example:
</p>
<ul>
    <li>
        Publication of&nbsp;reference source code
    </li>
    <li>
        Publication of&nbsp;reference models
    </li>
    <li>
        Publication of&nbsp;software architecture documentation
    </li>
    <li>
        Formal&nbsp;presentations of the material
    </li>
    <li>
        Informal walkthroughs of the architecture
    </li>
</ul><p/><p>
    As you evolve the architecture, you may wish to evolve your architectural models.&nbsp; For more information, see <a class="elementLinkWithType" href="./../../practice.tech.evolutionary_arch.base/guidances/guidelines/modeling_the_arch_8BE6E55B.html" guid="_HrgUQNcuEdy1nJEYZGzN4A">Guideline: Modeling the Architecture</a>.
</p></td>
</tr>
</table>
</div>
<div class="sectionHeading">More Information</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Concepts</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/arch_constraints_AE56B662.html" guid="_jdKSsNpiEdyP58ppo1Ieaw">Architectural Constraints</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/arch_goals_CB41D8AE.html" guid="_HlRqANpbEdyP58ppo1Ieaw">Architectural Goals</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/arch_significant_requirements_1EE5D757.html" guid="_HrZGIA4MEduibvKwrGxWxA">Architecturally Significant Requirements</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/arch_mechanism_2932DFB6.html" guid="_mzxI0A4LEduibvKwrGxWxA">Architectural Mechanism</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/component_CB167D48.html" guid="_0YP18MlgEdmt3adZL5Dmdw">Component</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/executable_arch_D4E68CBD.html" guid="_O1kAANvfEduv2KOT-Teh6w">Executable Architecture</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/concepts/key_abstractions_1474DBF2.html" guid="_pLEGUNqGEdy88NBoQgfGyg">Key Abstractions</a>
</li>
</ul>
</td>
</tr>
<tr valign="top">
<th class="sectionTableHeading" scope="row">Guidelines</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/guidelines/abstract_away_complexity_DBF13AE6.html" guid="_we3F4ACpEdu8m4dIntu6jA">Abstract Away Complexity</a>
</li>
<li>
<a href="./../../practice.tech.evolutionary_arch.base/guidances/guidelines/modeling_the_arch_8BE6E55B.html" guid="_HrgUQNcuEdy1nJEYZGzN4A">Modeling the Architecture</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/guidelines/repres_interfaces_to_ext_systems_51A34F6E.html" guid="_0gjdYMlgEdmt3adZL5Dmdw">Representing Interfaces to External Systems</a>
</li>
<li>
<a href="./../../core.tech.common.extend_supp/guidances/guidelines/software_reuse_B6B04C26.html" guid="_vO2uoO0OEduUpsu85bVhiQ">Software Reuse</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<table class="copyright" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="copyright"><p> This program and the accompanying materials are made available under the<br />
  <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse 
  Public License V1.0</a>, which accompanies this distribution. </p><p/><p> <a class="elementLink" href="./../../core.default.release_copyright.base/guidances/supportingmaterials/openup_copyright_C3031062.html" guid="_UaGfECcTEduSX6N2jUafGA">OpenUP Copyright</a></p></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script type="text/javascript" language="JavaScript">
				contentPage.onload();
			</script>
</html>
